package offer.day6;

import java.util.LinkedList;
import java.util.Queue;

public class No9Extend_twoQueueStack {
    /*
     * 面试题9扩展（extend）：用两个队列实现栈
     *    题目：用两个队列实现一个栈。
     *    	      请实现它的两个函数push和pop，（都是对栈尾进行操作）
     *    	      分别完成在栈尾部插入节点和删除节点的操作
     *
     *  	思路：#所有元素{a,b,c}进入q1，
     *           因为目的是实现栈，也就是最先进c，而队列是从对头开始出，
     *          #所以先把ab出q1并进q2，此时目标c到了q1对头，
     *          #出q1即可。
     *           此时q1已经为空，下一个要出的是b，
     *          #把a从q2出队并进q1，
     *           此时目标b在q2队头
     *          #出q2......
     *
     *          也就是--->把非空队列中的n-1个元素压入空队列，剩下的第n个元素出队列，
     *          这样保证了两个队列中总有一个是空队列
     *
     *  	 * */
    Queue<Integer> queue1=new LinkedList<>();
    Queue<Integer> queue2=new LinkedList<>();

    public static void main(String[] args) {
        No9Extend_twoQueueStack admin=new No9Extend_twoQueueStack();
        admin.push(1);
        admin.push(2);
        admin.push(3);
        admin.push(4);
        admin.push(5);
        admin.push(6);
        System.out.println(("查看栈大小:"+admin.size()));
        System.out.println("查看栈最顶部元素:"+admin.peek());
        System.out.println("删去栈最顶部元素:"+admin.pop());
        System.out.println("查看栈最顶部元素:"+admin.peek());

    }

    public void push(int i){
        queue1.add(i);

    }

    public int pop(){
        while(queue1.size()>1){
            queue2.add(queue1.poll());
        }
        int val=queue1.poll();
        Queue<Integer> tmp=new LinkedList<>();
        tmp=queue1;
        queue1=queue2;
        queue2=tmp;
        return val;
    }

    public int peek(){
        while(queue1.size()>1){
            queue2.add(queue1.poll());
        }
        int val=queue1.peek();
        queue2.add(queue1.poll());
        Queue<Integer> tmp=new LinkedList<>();
        tmp=queue1;
        queue1=queue2;
        queue2=tmp;
        return val;

    }

    public int size(){
        return queue1.size();
    }

    public boolean isEmpty(){
        return queue1.isEmpty();
    }
}
